﻿using Mono.Cecil;

namespace Cil.Ast.Cil;

public static class ModuleDefinitionEx
{
    public static TypeReference Import(this ModuleDefinition self, MetadataType metadataType)
    {
#pragma warning disable CS8603
        return (metadataType switch
        {
            MetadataType.Boolean => self.ImportReference(typeof(bool)),
            MetadataType.Byte => self.ImportReference(typeof(byte)),
            MetadataType.SByte => self.ImportReference(typeof(sbyte)),
            MetadataType.Int16 => self.ImportReference(typeof(short)),
            MetadataType.UInt16 => self.ImportReference(typeof(ushort)),
            MetadataType.Int32 => self.ImportReference(typeof(int)),
            MetadataType.UInt32 => self.ImportReference(typeof(uint)),
            MetadataType.Int64 => self.ImportReference(typeof(long)),
            MetadataType.UInt64 => self.ImportReference(typeof(ulong)),
            MetadataType.IntPtr => self.ImportReference(typeof(IntPtr)),
            MetadataType.UIntPtr => self.ImportReference(typeof(UIntPtr)),
            MetadataType.Single => self.ImportReference(typeof(float)),
            MetadataType.Double => self.ImportReference(typeof(double)),
            MetadataType.Char => self.ImportReference(typeof(char)),
            MetadataType.Array => self.ImportReference(typeof(Array)),
            MetadataType.Void => self.ImportReference(typeof(void)),
            _ => null
        });
#pragma warning restore CS8603
    }
}